package com.example.demo.service;

import com.example.demo.dto.NewTaskFlowDTO;
import com.example.demo.entity.NewTaskFlow;
import com.example.demo.request.CreateNewTaskFlowRequest;
import java.util.List;

public interface NewTaskFlowService {

    /**
     * 分页查询任务流程列表
     */
    List<NewTaskFlowDTO> getNewTaskFlows(int page, int size, Long taskId, Long flowId);

    /**
     * 统计任务流程总数
     */
    long countNewTaskFlows(Long taskId, Long flowId);

    /**
     * 根据ID查询任务流程详情
     */
    NewTaskFlowDTO getNewTaskFlowById(Long id);

    /**
     * 根据任务ID和流程ID查询
     */
    NewTaskFlowDTO getNewTaskFlowByTaskIdAndFlowId(Long taskId, Long flowId);

    /**
     * 根据任务ID查询所有关联的流程
     */
    List<NewTaskFlowDTO> getNewTaskFlowsByTaskId(Long taskId);

    /**
     * 根据流程ID查询所有关联的任务
     */
    List<NewTaskFlowDTO> getNewTaskFlowsByFlowId(Long flowId);

    /**
     * 创建任务流程关系
     */
    NewTaskFlowDTO createNewTaskFlow(CreateNewTaskFlowRequest request);

    /**
     * 更新任务流程关系
     */
    NewTaskFlowDTO updateNewTaskFlow(Long id, CreateNewTaskFlowRequest request);

    /**
     * 删除任务流程关系
     */
    void deleteNewTaskFlow(Long id);

    /**
     * 批量分配任务到流程
     * 根据数据源ID获取未分配的任务，并分配到指定流程
     */
    int batchAssignTasksToFlow(Long dataSourceId, Long processId);

    /**
     * 查询指定数据源的未分发任务流程关系
     */
    List<NewTaskFlowDTO> getUndistributedTaskFlowsByDataSourceId(Long dataSourceId);

    /**
     * 根据流程ID查询未分发的任务流程关系
     */
    List<NewTaskFlowDTO> getUndistributedTaskFlowsByFlowId(Long flowId);

    /**
     * 批量分发任务流程关系
     * 根据数据源ID获取未分发的任务流程关系，并将其标记为已分发
     */
    int batchDistributeTaskFlows(Long dataSourceId);

    /**
     * 根据流程ID批量分发任务流程关系
     * 获取指定流程的未分发任务流程关系，并将其标记为已分发
     */
    int batchDistributeTaskFlowsByFlowId(Long flowId);
}